package com.wx.mythread.singleton;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 6.懒汉式（线程安全）  （推荐）
 * 双重检查   推荐面试使用
 */
public class Singleton6 {

    //新建对象实际上有3个步骤
    /**
     * 1.创建一个空的对象
     * 2.调用对象的构造方法
     * 3.将实例赋值给引用
     * 如果CPU做了重排序，那么就会发生NPE
     */
    private volatile static Singleton6 INSTANCE;

    private Singleton6(){
    }

    public static Singleton6 getINSTANCE() {
        if (INSTANCE == null){
            synchronized (Singleton6.class) {
                if (INSTANCE == null) {
                    INSTANCE = new Singleton6();
                }
            }
        }
        return INSTANCE;
    }

}
